home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Utilities
/
SortIcons
/
SortIcons.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
2000-05-21
|
7KB
|
272 lines
/*
$VER: SortIcons.rexx 1.2 (20.05.00) Copyright (c) Christoph Gutjahr
*/
/* declare important variables */
h_spacer=16 /* horizontal space between icons */
v_spacer=04 /* vertical space between icons */
dir.0=1 /* default: "Tool"-Icons to right border */
dir.1=3 /* default: "Disk"-Icons to left border */
drawer.0=0 /* default: Ignore "Drawer"-Icons when sorting "Tool"-Icons */
drawer.1=0 /* default: Ignore "Drawer"-Icons when sorting "Disk"-Icons */
appicon.0=0 /* default: Ignore "App"-Icons when sorting "Tool"-Icons */
appicon.1=0 /* default: Ignore "App"-Icons when sorting "Disk"-Icons */
loop=0
changes=0
/* parse arguments */
PARSE ARG argument
argument=UPPER(argument)
l=WORDS(argument)
IF l>4 THEN CALL ERROR1
DO i=1 TO l
k=WORD(argument,i)
j=left(k,length(k)-2)
m=right(k,1)
SELECT
WHEN j="TOOL" THEN DO
SELECT
WHEN m="R" THEN dir.0=1
WHEN m="L" THEN dir.0=3
WHEN m="T" THEN dir.0=4
WHEN m="B" THEN dir.0=2
WHEN m="I" THEN dir.0=0
OTHERWISE CALL ERROR0
END
END
WHEN j="DISK" THEN DO
SELECT
WHEN m="R" THEN dir.1=1
WHEN m="L" THEN dir.1=3
WHEN m="T" THEN dir.1=4
WHEN m="B" THEN dir.1=2
WHEN m="I" THEN dir.1=0
OTHERWISE CALL ERROR0
END
END
WHEN j="APPICON" THEN DO
SELECT
WHEN m="T" & ~appicon.1 THEN appicon.0=1
WHEN m="D" & ~appicon.0 THEN appicon.1=1
OTHERWISE CALL ERROR0
END
END
WHEN j="DRAWER" THEN DO
SELECT
WHEN m="T" & ~drawer.1 THEN drawer.0=1
WHEN m="D" & ~drawer.0 THEN drawer.1=1
OTHERWISE CALL ERROR0
END
END
END
END
ADDRESS workbench
OPTIONS RESULTS
LOCKGUI
/* How many icons do we have ? */
GETATTR window.icons.all.count NAME root VAR total
DO FOREVER
IF loop=2 THEN leave
IF dir.loop=0 THEN DO
loop=loop+1
IF dir.loop=0 | loop=2 THEN LEAVE
END
dir=dir.loop
drawer=drawer.loop
appicon=appicon.loop
/*How many ignorable icons do we have ? */
others=0
DO i=0 TO total-1
GETATTR window.icons.all.i.type NAME root
SELECT
WHEN result="APPICON" & appicon THEN NOP
WHEN result="DRAWER" & drawer THEN NOP
WHEN result="DISK" & loop THEN NOP
WHEN result="TOOL" & ~loop THEN NOP
WHEN result="PROJECT" & ~loop THEN NOP
OTHERWISE others=others+1
END
END
/* Find the largest height and width of icons */
w=0
h=0
DO i=0 TO total-1
GETATTR window.icons.all.i NAME root STEM root
SELECT
WHEN '"'|| root.type ||'"'='"APPICON"' & ~appicon THEN NOP
WHEN '"'|| root.type ||'"'='"DRAWER"' & ~drawer THEN NOP
WHEN '"'|| root.type ||'"'='"DISK"' & ~loop THEN NOP
WHEN '"'|| root.type ||'"'='"TOOL"' & loop THEN NOP
WHEN '"'|| root.type ||'"'='"PROJECT"' & loop THEN NOP
OTHERWISE DO
IF w<root.width THEN w=root.width
IF h<root.height THEN h=root.height
full_name='"'|| root.name ||'"'
GETATTR application.font.icon.size NAME full_name
temp=RESULT
IF w<temp THEN w=temp
END
END
END
/* Get height of icon font */
GETATTR application.font.icon.height
font_h=result
font_h=font_h+2
/* calculate total size of largest icon including name and spacers */
w=w+h_spacer
h=h+font_h+v_spacer
/* Get size of workbench */
GETATTR window.width NAME root VAR win_w
GETATTR window.height NAME root VAR win_h
/* Calculate grid , EXIT if to many icons to fit.*/
colums=TRUNC(win_w/w)
gridx=w
rows=TRUNC(win_h/h)
gridy=h
IF total>(rows*colums) THEN CALL ERROR2
/* Calculate min-/max positions for icons*/
SELECT
WHEN dir=1 THEN DO
maxcol=colums-1
mincol=TRUNC(colums-((total-others)/rows))
maxrow=rows-1
minrow=0
END
WHEN dir=2 THEN DO
maxcol=colums-1
mincol=0
maxrow=rows-1
minrow=TRUNC(rows-((total-others)/colums))
END
WHEN dir=3 THEN DO
maxcol=TRUNC((total-others)/rows+0.9999)-1
mincol=0
maxrow=rows-1
minrow=0
END
OTHERWISE DO
maxcol=colums-1
mincol=0
maxrow=TRUNC((total-others)/colums+0.9999)-1
minrow=0
END
END
/* Clear the matrix for vacant grids */
DO i=0 TO colums-1
DO l=0 TO rows-1
free.i.l=0
END
END
/* Position Icons to grid */
DO j=0 TO total-1
GETATTR window.icons.all.j NAME root STEM root
SELECT
WHEN '"'|| root.type ||'"'='"APPICON"' & ~appicon THEN NOP
WHEN '"'|| root.type ||'"'='"DRAWER"' & ~drawer THEN NOP
WHEN '"'|| root.type ||'"'='"DISK"' & ~loop THEN NOP
WHEN '"'|| root.type ||'"'='"TOOL"' & loop THEN NOP
WHEN '"'|| root.type ||'"'='"PROJECT"' & loop THEN NOP
OTHERWISE DO
icongridx=TRUNC(root.left/gridx)
icongridy=TRUNC(root.top/gridy)
SELECT
WHEN dir=1 THEN DO
IF icongridx<mincol THEN icongridx=mincol
END
WHEN dir=2 THEN DO
IF icongridy<minrow THEN icongridy=minrow
END
WHEN dir=3 THEN DO
IF icongridx>maxcol THEN icongridx=maxcol
END
OTHERWISE DO
IF icongridy>maxrow THEN icongridy=maxrow
END
END
IF free.icongridx.icongridy=1 THEN DO
DO i=maxcol TO mincol BY -1
DO l=maxrow TO minrow BY-1
IF free.i.l=0 THEN DO
icongridx=i
icongridy=l
END
END
END
END
IF free.icongridx.icongridy=1 THEN CALL ERROR3
move_x=TRUNC(icongridx*gridx)
move_y=TRUNC(icongridy*gridy)
center_x=TRUNC((gridx-root.width)/2)
move_x=move_x+center_x
lock_y=gridy-root.height-font_h-1
move_y=move_y+lock_y
full_name='"'||root.name||'"'
IF move_x~=root.left | move_y ~=root.top THEN changes=1
ICON WINDOW root NAMES full_name X move_x Y move_y
free.icongridx.icongridy =1
END
END
END
loop=loop+1
END
IF changes=0 THEN DO
UNLOCKGUI
EXIT
END
cmdid='req'pragma('id')
address command 'rxset' cmdid '`requestchoice "SortIcon" "Fix icon positions ?" "Yes|No"`'
from_shell=getclip(cmdid)
call setclip(cmdid,'')
IF ~from_shell THEN DO
UNLOCKGUI
EXIT
END
/* Save the changes */
ADDRESS WORKBENCH
MENU window ROOT invoke window.snapshot.all
UNLOCKGUI
EXIT
/* ------------- The error messages are following below --------------- */
/* Error: Unknown argument */
ERROR0:
ADDRESS COMMAND
'REQUESTCHOICE >NIL: "SortIcons" "Error: Wrong or misspelled arguments!" "OK"'
EXIT 10
RETURN
/* Error: Too many arguments */
ERROR1:
ADDRESS COMMAND
'REQUESTCHOICE >NIL: "SortIcons" "Error: Too many arguments!" "OK"'
EXIT 10
RETURN
/* Error: Too many Icons to fit in grid ! */
ERROR2:
ADDRESS COMMAND
'REQUESTCHOICE >NIL: "SortIcons" "Error: Too many Icons to fit in grid!" "OK"'
UNLOCKGUI
EXIT 10
RETURN
/* Error: Grid miscalculation ! */
ERROR3:
ADDRESS COMMAND
'REQUESTCHOICE >NIL: "SortIcons" "Error: Grid miscalculation!*n*nPlease contact the author." "OK"'
UNLOCKGUI
EXIT 10
RETURN